package cn.edu.lingnan.controllerV1;

 import cn.edu.lingnan.user.dtos.Result;
 import cn.edu.lingnan.utils.ConnectionCounter;
 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.web.bind.annotation.*;

/**
 * 消息控制器，提供接口用于发送广播和点对点通知。
 */
@RestController
@RequestMapping("/notify")
public class NotificationController {

    @Autowired
    private SimpMessagingTemplate simpMessagingTemplate;

    @Autowired
    private ConnectionCounter connectionCounter;

    /**
     * POST请求：管理员发送广播通知给所有订阅者。
     *
     * @param message 消息内容
     */
    @PostMapping("/send")
    public void sendNotification(@RequestBody String message) {
        System.out.println("发送广播消息: " + message);
        simpMessagingTemplate.convertAndSend("/topic/notifications", message);
    }

    /**
     * POST请求：管理员发送点对点通知给特定用户。
     *
     * @param userId 目标用户的 userId
     * @param message 消息内容
     */
    @PostMapping("/sendToUser")
    public Result sendToUser(@RequestParam String userId, @RequestBody String message) {
        System.out.println("发送消息给用户 " + userId + ": " + message);
        simpMessagingTemplate.convertAndSendToUser(userId, "/queue/notifications", message);
        return Result.success();
    }

    /**
     * 可选：使用 STOMP 发送消息的示例方法。
     * POST请求：管理员通过 STOMP 协议发送消息到广播主题。
     *
     * @param message 消息内容
     * @return 广播消息
     */
    @PostMapping("/stomp")
    @SendTo("/topic/notifications")
    public String sendNotificationStomp(@RequestBody String message) {
        return message;
    }

    /**
     * GET请求：获取当前活跃的 WebSocket 连接数。
     *
     * @return 当前连接数
     */
    @GetMapping("/connectionCount")
    public Result getConnectionCount() {
        return Result.success(connectionCounter.getActiveConnections());
    }
}
